#pragma once
#include <iostream>
#include "Comm.hpp"

class Init
{
public:
    Init()
    {
        umask(0);
        int n = ::mkfifo(gpipeFile.c_str(), gmode);
        if(n < 0)
        {
            std::cerr << "mkfifo error "<< std::endl;

            return;
        }

        std::cout<<"make mkfifo success" <<std::endl;
        sleep(10);
    }


    ~Init()
    {
        int n = unlink(gpipeFile.c_str());
        if(n < 0)
        {
             std::cerr << "unlink error" <<std::endl;
             return;
        }
        std::cout<< " unlink success" <<std::endl;
    }
};

Init init;

class Server
{
public:
    Server():_fd(dfultfd)
    {}

    bool OpenPipeForRead()
    {
            _fd = OpenPipe(gForRead);
            if(_fd < 0)
            {   
                std::cerr<< "open error" <<std::endl;
                return false;
            }
            return true;
    }

    //std::string *: 输出型参数
    //const std::string & :输入型参数
    //std::string &: 输入输出型参数
    int RecvPipe(std::string *out)
    {
        char buffer[gsize];
        size_t n = ::read(_fd, buffer, sizeof(buffer)-1);
        if(n > 0)
        {
            buffer[n] = 0;
            *out = buffer;
        }

        return n;
    }

    void closePipe()
    {
        ClosePipeHelper(_fd);
    }

    ~Server()
    {}
private:
    int _fd;
};